home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / UI / WidgetPDial.fl < prev   
Text File  |  2005-03-14  |  3KB  |  132 lines

  1. # data file for the Fltk User Interface Designer (fluid)
  2. version 1.0105 
  3. header_name {.h} 
  4. code_name {.cc}
  5. decl {//Copyright (c) 2003-2005 Nasca Octavian Paul} {} 
  6.  
  7. decl {//License: GNU GPL version 2} {} 
  8.  
  9. decl {\#include <FL/Fl_Dial.H>} {public
  10.  
  11. decl {\#include <FL/fl_draw.H>} {public
  12.  
  13. decl {\#include <stdio.h>} {public
  14.  
  15. decl {\#include <math.h>} {public
  16.  
  17. class WidgetPDial {: {public Fl_Dial}
  18. } {
  19.   Function {WidgetPDial(int x,int y, int w, int h, const char *label=0):Fl_Dial(x,y,w,h,label)} {} {
  20.     code {oldvalue=0.0;} {}
  21.   }
  22.   Function {handle(int event)} {return_type int
  23.   } {
  24.     code {double dragsize,v,min=minimum(),max=maximum();
  25. int my;
  26.  
  27. switch (event){
  28. case FL_PUSH:oldvalue=value();
  29. case FL_DRAG:
  30.      my=-(Fl::event_y()-y()-h()/2);
  31.  
  32.      dragsize=200.0;
  33.      if (Fl::event_state(FL_BUTTON1)==0) dragsize*=10;
  34.      v=oldvalue+my/dragsize*(max-min);
  35.      if (v<min) v=min;
  36.         else if (v>max) v=max;
  37.  
  38.      //printf("%d   %g    %g\\n",my,v,oldvalue);     
  39.      value(v);
  40.      value_damage();
  41.      if (this->when()!=0) do_callback();
  42.      return(1); 
  43.      break;
  44. case FL_RELEASE:
  45.      if (this->when()==0) do_callback();
  46.     return(1);
  47.      break;
  48. };
  49. return(0);} {selected
  50.     }
  51.   }
  52.   Function {drawgradient(int cx,int cy,int sx,double m1,double m2)} {return_type void
  53.   } {
  54.     code {for (int i=(int)(m1*sx);i<(int)(m2*sx);i++){
  55.    double tmp=1.0-pow(i*1.0/sx,2.0);
  56.    pdialcolor(140+(int) (tmp*90),140+(int)(tmp*90),140+(int) (tmp*100));
  57.    fl_arc(cx+sx/2-i/2,cy+sx/2-i/2,i,i,0,360);
  58. };} {}
  59.   }
  60.   Function {draw()} {} {
  61.     code {int cx=x(),cy=y(),sx=w(),sy=h();
  62.  
  63.  
  64. //clears the button face
  65. pdialcolor(190,190,200);
  66. fl_pie(cx-1,cy-1,sx+2,sy+2,0,360);
  67.  
  68. //Draws the button face (gradinet)
  69. drawgradient(cx,cy,sx,0.5,1.0);
  70.  
  71. double val=(value()-minimum())/(maximum()-minimum());
  72.  
  73. //draws the scale
  74. pdialcolor(220,220,250);
  75. double a1=angle1(),a2=angle2();
  76. for (int i=0;i<12;i++){
  77.    double a=-i/12.0*360.0-val*(a2-a1)-a1;
  78.    fl_pie(cx,cy,sx,sy,a+270-3,a+3+270);
  79. };
  80.  
  81. drawgradient(cx,cy,sx,0.0,0.75);
  82.  
  83. //draws the value
  84. double a=-(a2-a1)*val-a1;
  85.  
  86.  
  87.  
  88.  
  89.  
  90. //draws the max and min points
  91. pdialcolor(0,100,200);
  92. int xp=(int)(cx+sx/2.0+sx/2.0*sin(angle1()/180.0*3.141592));
  93. int yp=(int)(cy+sy/2.0+sy/2.0*cos(angle1()/180.0*3.141592));
  94. fl_pie(xp-2,yp-2,4,4,0,360);
  95.  
  96. xp=(int)(cx+sx/2.0+sx/2.0*sin(angle2()/180.0*3.141592));
  97. yp=(int)(cy+sy/2.0+sy/2.0*cos(angle2()/180.0*3.141592));
  98. fl_pie(xp-2,yp-2,4,4,0,360);
  99.  
  100.  
  101.  
  102.  
  103.  
  104. fl_push_matrix();
  105.  
  106.   fl_translate(cx+sx/2,cy+sy/2);
  107.   fl_rotate(a-90.0); 
  108.  
  109.   fl_translate(sx/2,0);
  110.  
  111.  
  112.   fl_begin_polygon();
  113.    pdialcolor(0,0,0);
  114.    fl_vertex(-10,-4);
  115.    fl_vertex(-10,4);
  116.    fl_vertex(0,0);  
  117.   fl_end_polygon();
  118.  
  119.  
  120. fl_pop_matrix();} {}
  121.   }
  122.   Function {pdialcolor(int r,int g,int b)} {} {
  123.     code {if (active_r()) fl_color(r,g,b);
  124.    else fl_color(160-(160-r)/3,160-(160-b)/3,160-(160-b)/3);} {}
  125.   }
  126.   decl {double oldvalue;} {}
  127.